from selenium import webdriver
from selenium.webdriver.common.by import By
import time

from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait


def wait_sleep():
    """
    如果直接执行，不添加任何等待，可能会报错
    """
    driver = webdriver.Chrome()
    # driver.get("https://vip.ceshiren.com/")
    # 添加等待，让页面渲染完成
    # 不加等待，可能会因为网速等原因产生报错
    # ************强制等待得使用
    # =====报错：  no such element: Unable to locate element
    # =====原因：  页面未加载完成，就去查找元素，此时这个元素还没加载出来
    # =====解决方案  在报错之前添加强制等待，等待页面渲染完成
    # 如果没有报错，证明就是页面渲染速度导致得问题，如果添加了强制等待还是报错，可能是别的问题，比如定位错误
    # time.sleep(3)
    # *************隐式等待
    # 1.强制等待得问题：不确定页面得加载时间，可能会因为等待时间过长，而影响用例得执行效率
    # 2.强制等待得问题：不确定页面得加载时间，可能会因为等待时间过断，而导致代码依然会报错
    # 使用方法：1.在代码一开始运行得时候就添加隐式等待得配置，注意，隐式等待是全局生效
    # 2.注意：隐式等待只能解决元素查找的问题，不能解决元素交互的问题
    driver.implicitly_wait(5)
    driver.find_element(By.XPATH, "//*[text()='个人中心']")
    driver.find_element(By.XPATH,"//*[text()='题库']")

def wait_show():
    driver = webdriver.Chrome()
    driver.get('https://vip.ceshiren.com/#/ui_study/frame')
    # driver.implicitly_wait(4)
    # 问题:元素可以找到，但是点击效果没有触发
    # *******显示等待
    # 第一个参数是driver,第二个参数是最长等待时间,util方法内需要结合expected_conditions或者自己对封装的方法进行使用
    # expected_conditions的参数传入的都是一个元组,既多一层小括号
    WebDriverWait(driver, 10).until(expected_conditions.element_to_be_clickable((By.ID, "success_btn")))
    driver.find_element(By.ID,"success_btn").click()
    time.sleep(3)

if __name__ == '__main__':
    # wait_sleep()
    wait_show()
